Skip to main content

06 语句执行内幕

用中断(Break)代替跳转

程序装入位置被标定成内存的指定位置,这个位置通常是个地址偏移量,可以用数字化或符号化的形式来表达。为代码语句标示一个位置的做法,根本目的是为了实现 GOTO 跳转,任何时候都可以通过 GOTO 标号的语法来转移执行流程。

约定可以通过 GOTO 到达的位置

break:可中断语句 BreakableStatement

循环语句以及 switch 语句

任意的标签化语句

// 标签aaa
aaa: {
...
}

// 标符bbb
bbb: if (true) {
...
}

标签化语句理解的是位置,而不是(语句在执行环境中的)范围。

如果在 try 或 try..finally 块中使用了 return,break 将发生于最后一行语句之后,在 return 语句之前。

执行现场的回收

作用域就是被操作的一个对象。

  • 作用域退出:函数 RETURN
  • 作用域挂起:执行权的转移
  • 作用域的创建:一个闭包的初始化

语句执行的意义

  • 一个函数的调用:调用函数——执行函数体(EvaluateBody)并得到它的“完成”结果(result)。
  • 一个块语句的执行:执行块中的每行语句,得到它们的“完成”结果(result)。

结果(result)包括的状态有五种,称为完成的类型:normal、break、continue、return、throw。

任何语句的行为包含两种:

包含了有效的、可用于计算的数据值(Value):

  • 正常完成(normal)
  • 一个函数调用的返回(return)

是一个不可(像数据那样)用于计算或传递的纯粹状态:

  • 循环过程中的继续下次迭代(continue)
  • 中断(break)
  • 异常(throw)